function 阶乘(n) {
	if (n === 0 || n === 1) {
		return 1;
	}
	return n * 阶乘(n - 1);
}

export function 生成单双数(要单 = true) {
	let arr = [];
	let start = 要单 ? 1 : 2;
	let step = 2
	let end = 49;
	for (let i = start; i <= end; i += step) {
		let numStr = i.toString().padStart(2, '0');
		arr.push(numStr);
	}
	return arr;
}
export function 生成数字字符串(开始, 结束) {
	let arr = [];
	for (let i = 开始; i <= 结束; i++) {
		let numStr = i.toString().padStart(2, '0');
		arr.push(numStr);
	}
	return arr
}

export function 计算组合数(总数, 挑数) {
	// console.log('总数: ', 总数);
	// console.log('挑数: ', 挑数);
	if (!挑数 || !总数 || 总数 < 挑数) {
		return 0
	}
	const res = 阶乘(总数) / (阶乘(挑数) * 阶乘(总数 - 挑数));
	return res
}

export function 列出组合组(arr, 挑数) {
	const res = 递归组合(arr, 挑数)
	return res
}

function 递归组合(arr, 挑数) {
	if (挑数 === 0) {
		return [
			[]
		];
	}

	const res = [];
	for (let i = 0; i < arr.length; i++) {
		const rest = arr.slice(i + 1);
		const 组合结果组 = 递归组合(rest, 挑数 - 1);
		for (const 组合结果 of 组合结果组) {
			res.push([arr[i], ...组合结果]);
		}
	}
	return res;
}

export function 数值圆整(num, 位数 = 1) {
	// console.log('num: ', num);
	let res = Math.round(num, 位数)
	if (位数 > 0) {
		res = Math.round(num * 10 * 位数) / (10 * 位数);
	}
	// console.log('res: ', res);
	return res
}